﻿#include <iostream>

#define MAX(a, b) (a > b ? a : b)

static int calcMaxDepth(const char* text)
{
    int count = 0;
    int maxDepth = 0;
    int index = 0;
    size_t len = strlen(text);
    while (index < len)
    {
        char cur = text[index++];
        if (cur == '(') ++count;
        else --count;

        maxDepth = MAX(count, maxDepth);
    }

    return maxDepth;
}

// 一个合法的括号匹配序列有以下定义：
// 1. 空串""是一个合法的括号匹配序列
// 2. 如果"X"和"Y"都是合法的括号匹配序列，"XY"也是一个合法的括号匹配序列
// 3. 如果"X"是一个合法的括号匹配序列，那么"(X)"也是一个合法的括号匹配序列
// 4. 每个合法的括号序列都可以由以上规则生成。
// 例如: "", "()", "()()", "((()))"都是合法的括号序列。
// 对于一个合法的括号序列，我们又有以下定义它的深度：
// 1. 空串""的深度是0
// 2. 如果字符串"X"的深度是x，字符串"Y"的深度是y，那么字符串"XY"的深度是max(x, y)
// 3. 如果"X"的深度是x，那么字符串"(X)"的深度是x + 1
// 例如："()()()"的深度是1，"((()))"的深度是3.
// 牛牛现在给你一个合法的括号序列，需要你计算出其深度。
int main_DepthOfBrackets()
{
    char text[256] = "()((()))";
    int maxDepth = calcMaxDepth(text);
    printf("%d\n", maxDepth);
    return 0;
}